import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

// 创建 Vuex.Store 的实例
export default new Vuex.Store({
  // 存放公共数据的位置, 公共的 data
  state: {
    statusList: [],  // 状态
    // statusList: [
    //   {
    //     id: 'STATUS1',
    //     name: '未审核',
    //     color: 'red'
    //   },
    //   {
    //     id: 'STATUS2',
    //     name: '已审核',
    //     color: 'blue'
    //   }
    // ]
    categoryList: [],  // 分类
    role: '', // 用户角色
    permissions: [],  // 权限
  },
  // 修改公共数据的方法
  mutations: {
    // 两个参数，第一个是state，第二个是调用时传递过来的数据
    setStatusList(state, list) {
      state.statusList = list;
    },
    //
    setCategoryList(state, list) {
      state.categoryList = list;
    },

    setRole(state, role) {
      state.role = role;
    },
    setPermissions(state, arr) {
      state.permissions = arr;
    }
  },
  // state 的派生状态，相当于通过state计算出来的变量，可以理解为公共的计算属性
  getters: {
    statusObj(state) {
      const obj = {};
      state.statusList.forEach(i => {
        obj[i.id] = {
          name: i.name,
          color: i.color
        };
      })
      return obj;
    },

    categoryObj(state) {
      const obj = {};
      state.categoryList.forEach(i => {
        obj[i.id] = i.name;
      })
      return obj;
    },

    isAdmin: state => state.role === 'admin'
  },

  // 多个 commit 组合，写异步逻辑
  actions: {
    // 第一个参数 context 对象中包含和 $store 实例相同的属性和方法
    setUser(context, user) {
      // context.commit 就相当于 this.$store.commit
      // console.log('user', user)
      context.commit('setRole', user.role);
      context.commit('setPermissions', user.permissions);
    }
  },
  modules: {
  }
})



/**
 * Vuex统一状态，数据管理
 * 唯一数据源 / 数据只有一份
 * this.$store.state
 *
 *
 */
